<?php

namespace app\common\model;

use think\Db;
use think\Model;

/**
 * 附件分类模型
 * Class AttachmentNavModel
 * @package app\common\model
 */
class AttachmentNavModel extends Model
{
    protected $name = 'attachment_nav';

    /**
     * 获取全部分类
     * @return false|\PDOStatement|string|\think\Collection
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getNavList()
    {
        $field   = ['id' => 'value', 'name' => 'label'];
        $navList = Db::name('attachment_nav')
            ->where(['pid' => 0, 'status' => 1])
            ->field($field)
            ->select();
        if (!empty($navList)) {
            foreach ($navList as &$v) {
                $v['children'] = Db::name('attachment_nav')
                    ->where(['pid' => $v['value'], 'status' => 1])
                    ->field($field)
                    ->select();
            }
        }

        return $navList;
    }

    /**
     * 搜索栏目
     * @param $keyword
     * @return array|false|\PDOStatement|string|\think\Collection
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function searchNav($keyword)
    {
        if (empty($keyword)) {
            return [];
        }

        $field   = ['id' => 'value', 'name' => 'label'];
        $navList = Db::name('attachment_nav')
            ->where(['name' => ['LIKE', '%' . $keyword . '%'], 'status' => 1])
            ->field($field)
            ->select();

        if (!empty($navList)) {
            foreach ($navList as &$v) {
                $v['children'] = Db::name('attachment_nav')
                    ->where(['pid' => $v['value'], 'status' => 1])
                    ->field($field)
                    ->select();
            }
        }

        return $navList;
    }

    /**
     * 获取列表
     * @param $params
     * @param int $rows
     * @param int $page
     * @param string $fields
     * @return array
     * @throws \think\exception\DbException
     */
    public function getLists($params, $rows = 20, $page = 1, $fields = '*')
    {
        // 条件搜索
        if (!empty($params['where'])) {
            $this->where($params['where']);
        } else {
            if (!empty($params['keyword'])) {
                switch ($params['type']) {
                    case 1 :
                        $this->where(['name' => ['LIKE', '%' . $params['keyword'] . '%']]);
                        break;
                }
            }
            if (!empty($params['status'])) {
                $this->where(['status' => $params['status']]);
            }
            // 时间范围查询
            if (!empty($params['start_time'])) {
                $this->where('createtime', '>=', $params['start_time']);
            }
            if (!empty($params['end_time'])) {
                $this->where('createtime', '<=', $params['end_time']);
            }
        }

        // 排序
        $order  = !empty($params['order']) ? $params['order'] : 'id DESC';
        $result = $this
            ->field($fields)
            ->order($order)
            ->paginate($rows, false, [
                'page' => $page
            ]);

        $arr = [
            'list'     => [],
            'total'    => 0,
            'page'     => 1,
            'pageSize' => $rows
        ];
        // 格式化数据信息
        if (!$result->isEmpty()) {
            $arr = [
                'list'     => $result->items(),
                'total'    => $result->total(),
                'page'     => $result->currentPage(),
                'pageSize' => $result->listRows()
            ];
        }

        return $arr;
    }

    /**
     * 添加
     * @param $data
     * @return bool|int|string
     */
    public function add($data)
    {
        if (empty($data) || !is_array($data)) {
            $this->error = '参数不正确';
            return false;
        }

        return $this->transaction(function () use ($data) {
            $id = $this->insertGetId($data);

            if (empty($data['sort'])) {
                $this->update([
                    'id'   => $id,
                    'sort' => $id
                ]);
            }

            return $id;
        });
    }

    /**
     * 获取某条记录
     * @param $where
     * @return array|bool|false|\PDOStatement|string|Model
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getItem($where)
    {
        if (empty($where)) {
            $this->error = '参数不正确。';
            return false;
        }
        if (floor($where) > 0) {
            $where = ['id' => $where];
        }

        return $this->where($where)->find();
    }

    /**
     * 编辑
     * @param $data
     * @return bool
     */
    public function edit($data)
    {
        if (empty($data) || !is_array($data)) {
            $this->error = '参数不正确';
            return false;
        }

        if ($this->update($data)) {
            return true;
        } else {
            $this->error = '编辑出错了，请重新尝试。';
            return false;
        }
    }

    // 删除
    public function del($where)
    {
        if (empty($where)) {
            $this->error = '参数不正确';
            return false;
        }

        if ($this->where($where)->delete()) {
            return true;
        } else {
            $this->error = '删除出错了，请重新尝试。';
            return false;
        }
    }
}